package com.swak.paxos;

import com.swak.paxos.protocol.PaxosMessage;

/**
 * Proposer.
 * 
 * @author DELL
 */
public interface Proposer {

	/**
	 * 新一轮
	 */
	void newInstance();

	/**
	 * 提交一个值
	 * 
	 * @param value
	 */
	void commit(Value value);

	/**
	 * 第一阶段准备阶段
	 * 
	 * @param needNewBallot
	 */
	void prepare(boolean needNewBallot);

	/**
	 * 收到 prepare 的响应
	 * 
	 * @param message
	 */
	void onPrepareReply(PaxosMessage message);

	/**
	 * 第二阶段接受阶段
	 */
	void accept();

	/**
	 * 收到 accept 的响应
	 * 
	 * @param message
	 */
	void onAcceptReply(PaxosMessage message);

	/**
	 * 提交成功
	 */
	void proposed();
}
